package cn.fuxi2022.accounts.message.controller;

import cn.fuxi2022.accounts.message.service.WeChatMessageService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

@Slf4j
@RestController
@RequestMapping("weChatMessage")
public class WeChatMessageController {

    @Autowired
    private WeChatMessageService weChatMessageService;

    /**
     * 验证消息的确来自微信服务器
     * 开发者通过检验 signature 对请求进行校验（下面有校验方式）。
     * 若确认此次 GET 请求来自微信服务器，请原样返回 echostr 参数内容，则接入生效，成为开发者成功，否则接入失败。
     *
     * @param signature 微信加密签名，signature结合了开发者填写的 token 参数和请求中的 timestamp 参数、nonce参数。
     * @param timestamp 时间戳
     * @param nonce     随机数
     * @param echostr   随机字符串，确认此次 GET 请求来自微信服务器，原样返回 echostr 参数内容
     * @return 给服务器的响应
     */
    @GetMapping
    public String verifyToken(String signature, String timestamp, String nonce, String echostr) {
        // 1.获取必备参数
        log.info("signature: {} nonce: {} echostr: {} timestamp: {}", signature, nonce, echostr, timestamp);
        // 2.合法校验
        if (weChatMessageService.verifyToken(signature, timestamp, nonce)) {
            log.info("token ok");
            // 3.确认此次 GET 请求来自微信服务器，请原样返回 echostr 参数内容
            return echostr;
        }
        return "非法的微信服务器！！！";
    }

    /**
     * 发送订单的模板消息 接口
     */
    @PostMapping("/pushMessage")
    public void pushMessage(@RequestBody Map<String, Object> map) {
        String openId = String.valueOf(map.get("openId"));
        String name = String.valueOf(map.get("name"));
        String orderNo = String.valueOf(map.get("orderNo"));
        String time = String.valueOf(map.get("time"));
        int type = (int) map.get("type");

        weChatMessageService.pushPayMessage(openId, name, orderNo, time, type);
    }
}
